package cn.itcast.nems.journal.service;

import cn.itcast.nems.approval.dao.entity.ApprovalForm;
import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.journal.dto.*;
import cn.itcast.nems.studentrecord.bo.JournalClazzModel;
import cn.itcast.nems.studentrecord.dao.entity.JournalTransfer;
import cn.itcast.nems.studentrecord.dto.TransferOrderStateUpdateParams;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Map;

public interface JournalTransferService extends IService<JournalTransfer> {

    /**
     * 转班凭单页面，搜索班级
     *
     * @param queryModel
     * @return
     */
    cn.itcast.ic.common.bean.Page<Map> searchClazzes(PageQueryModel<JournalClazzModel> queryModel);

    /**
     * 转班凭单页面，info.getId()分页
     *
     * @param condition
     * @param objectPage
     * @return
     */
    cn.itcast.ic.common.bean.Page<JournalTransferInListVDto> page(JournalTransferQuery condition, Page<?> objectPage);

    /**
     * 创建凭单
     *
     * @param bo
     * @return
     */
    String create(JournalTransferCreateBo bo);

    /**
     * 更新单行的凭单
     *
     * @param bo
     * @return
     */
    String updateSingleLine(JournalTransferCreateBo bo);

    /**
     * 凭单详情
     *
     * @param id
     * @return
     */
    JournalTransferInfoVDto info(String id);

    String loadFormId(String journalId);

    /**
     * 更新凭单
     *
     * @param info
     * @return
     */
    Boolean update(JournalTransferInfoBDto info);

    /**
     * 删除凭单
     *
     * @param id
     * @return
     */
    Boolean delete(String id);

    void cancel(String businessKey);

    /**
     * 获取待审批的凭单列表(废弃via公共接口)
     *
     * @return
     */
    @Deprecated
    Boolean isHaveWaitApprovingList();

    /**
     * 更新凭单行订单状态（订单逻辑调用）
     *
     * @param params
     */
    void onTransferOrderStateUpdate(TransferOrderStateUpdateParams params);

    // 手动同步
    void manualSync(ApprovalForm approvalForm);
}
